/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package server;

import java.util.HashMap;

/**
 *
 * @author Frank
 */
public class Protocol {
    
    private static int state = 0;
    private static final int klaarvooractie = 1;
    private static final int vertaalwoord = 2;
    private static final int vertaalzin = 3;
    private static final int woordtoevoegen = 4;
    private static final int orgineelwoordtoevoegen = 5;
    private static final int vertaalwoordtoevoegen = 6;
    
    private HashMap woorden = new HashMap();
    private String orgineelWoord = null;
    
    public Protocol() {
        
        this.woorden.put("hallo","hello");
        this.woorden.put("dit","this");
        this.woorden.put("is","is");
        this.woorden.put("een","a");
        this.woorden.put("test","test");
        
    }
    
    public String vertaal(String clientResponse) {
        
        if(state == 0){
            
            // We zijn klaar voor ontvangen
            state = klaarvooractie;
            
            // Geef keuze weer aan gebruiker
            return "Wat wil je doen? zinnen of losse woorden vertalen of woorden toevoegen? Mogelijk antwoorden: woord, zin of toevoegen";
            
        } else if(state == klaarvooractie) {
            
            // Check of de gebruiker een keus heeft gemaakt
            if(clientResponse.equalsIgnoreCase("woorden") || clientResponse.equalsIgnoreCase("woord")) {
                state = vertaalwoord;
                return "Voer een woord in:";
            } else if(clientResponse.equalsIgnoreCase("zin") || clientResponse.equalsIgnoreCase("zinnen")) {
                state = vertaalzin;
                return "Voer een zin in:";
            } else if(clientResponse.equalsIgnoreCase("toevoegen")) {
                state = orgineelwoordtoevoegen;
                return "Geef het woord op waar u een vertaling voor heeft:";
            } else {
                return "Geef een geldige keuze op: (woord/zin/toevoegen)";
            }
        } else if(state == orgineelwoordtoevoegen) {
            
            this.orgineelWoord = clientResponse;
            state = vertaalwoordtoevoegen;
            
            return "Geef nu de vertaling van het woord " + clientResponse + " op: ";
        
        } else if(state == vertaalwoordtoevoegen) {
            
            // Woord toevoegen aan lijst
            this.woordToevoegen(this.orgineelWoord, clientResponse);
            
            // State weer terug op actie zetten
            state = klaarvooractie;
            
            return "Woord inclusief vertaling toegevoegd. Geef opnieuw een actie op";
            
        } else if(state == vertaalwoord) {
            
            // Status weer terugzetten
            state = klaarvooractie;
            
            return this.vertaalWoord(clientResponse);
            
        } else if(state == vertaalzin) {
            
            state = klaarvooractie;
            
            return this.vertaalZin(clientResponse);
            
        }
        
        return "";
    }
    
    public void woordToevoegen(String woord, String vertaling) {
        
        // Woord toevoegen aan hashmap
        this.woorden.put(woord.toLowerCase(),vertaling.toLowerCase());
        
    }
    
    public String vertaalWoord(String tekst){
        
        String vertaaldWoord = "";
        
        try {
            vertaaldWoord = this.woorden.get(tekst).toString();
        } catch(Exception e) {
            return "Vertaling niet gevonden, voer opnieuw een actie in: ";
        }
        
        return vertaaldWoord;
        
    }
    
    public String vertaalZin(String tekst) {
        
        // De zin opsplitsen
        String[] losseWoorden = tekst.split(" ");
        String vertaaldeZin = "";
        
        for (String woord : losseWoorden)  
        {  
            
            String vertaling = this.vertaalWoord(woord);
            
            if(vertaling.equals("Vertaling niet gevonden, voer opnieuw een actie in: ")) {
                return "Geen geldige vertaling gevonden voor deze zin.";
            }
            
            vertaaldeZin = vertaaldeZin + " " + vertaling;
            
        }
        
        return vertaaldeZin + "\n Geef opnieuw een actie op: ";
    }
    
}
